package cn.hftoday.org;

import java.util.*;

/**
 * Party
 * @author lane.cn@gmail.com
 *
 */
public interface Party {
	
	/**
	 * id
	 * @return
	 */
	String getId();
	
	/**
	 * id
	 * @param id
	 */
	void setId(String id);
	
	/**
	 * name
	 * @return
	 */
	String getName();
	
	/**
	 * name
	 * @param name
	 */
	void setName(String name);
	
	/**
	 * icon
	 * @return
	 */
	String getIcon();
	
	/**
	 * icon
	 * @param icon
	 */
	void setIcon(String icon);
	
	/**
	 * parent
	 * @return
	 */
	Party getParent();
	
	/**
	 * parent
	 * @param parent
	 */
	void setParent(Party parent);
	
	/**
	 * children
	 * @return
	 */
	List<Party> getChildren();

	/**
	 * all children
	 * @return
	 */
	List<Party> getAllChildren();
	
	/**
	 * children
	 * @param range
	 * @return
	 */
	List<Party> getChildren(Party range);
	
	/**
	 * children count
	 * @return
	 */
	int getChildrenCount();
	
	/**
	 * all children count
	 * @return
	 */
	int getAllChildrenCount();
	
	/**
	 * children count
	 * @param range
	 * @return
	 */
	int getChildrenCount(Party range);

	/**
	 * child
	 * @param id
	 * @return
	 */
	Party getChild(String id);
	
	/**
	 * add a child
	 * @param child
	 */
	void addChild(Party child);
	
	/**
	 * add a child
	 * @param child
	 * @param range
	 */
	void addChild(Party child, Party range);
	
	/**
	 * remove a child
	 * @param child
	 */
	void removeChild(Party child);

	/**
	 * remove a child
	 * @param child
	 * @param range
	 */
	void removeChild(Party child, Party renge);
	
	/**
	 * hidden party
	 * @return
	 */
	boolean isHidden();
	
	/**
	 * hidden party
	 * @param hidden
	 */
	void setHidden(boolean hidden);
	
	Calendar getCreateTime();
	
	void setCreateTime(Calendar createTime);
	
	Calendar getUpdateTime();
	
	void setUpdateTime(Calendar updateTime);
}
